package com.utils.tools;

import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

/**
 * 关于软键盘的工具类
 * @author wan
 * @Date 20160808
 * @UpdateLog
 */
public class SoftInputUtil {

	// 在manifest.xml中activity中设置
//	android:windowSoftInputMode="stateVisible|adjustResize"
	
	/**
	* 动态隐藏软键盘
	*/
	public static void hideSoftInput(Activity activity) {
	    View view = activity.getWindow().peekDecorView();
	    if (view != null) {
	        InputMethodManager inputmanger = (InputMethodManager) activity
	                .getSystemService(Context.INPUT_METHOD_SERVICE);
	        inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0);
	    }
	}

	/**
	* 动态隐藏软键盘
	*/
	public static void hideSoftInput(Context context, EditText edit) {
	    edit.clearFocus();
	    InputMethodManager inputmanger = (InputMethodManager) context
	            .getSystemService(Context.INPUT_METHOD_SERVICE);
	    inputmanger.hideSoftInputFromWindow(edit.getWindowToken(), 0);
	}
	
	
	
	/**
	 * 点击屏幕空白区域隐藏软键盘（方法0）
	 * <p>在onTouch中处理，未获焦点则隐藏
	 * <p>参照以下注释代码
	 */
	public static void clickBlankArea2HideSoftInput0() {
	    Log.i("tips", "U should copy the following code.");
	    /*
	    @Override
	    public boolean onTouchEvent (MotionEvent event){
	        if (null != this.getCurrentFocus()) {
	            InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
	            return mInputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0);
	        }
	        return super.onTouchEvent(event);
	    }
	    */
	}

	/**
	 * 点击屏幕空白区域隐藏软键盘（方法1）
	 * <p>根据EditText所在坐标和用户点击的坐标相对比，来判断是否隐藏键盘
	 * <p>需重写dispatchTouchEvent
	 * <p>参照以下注释代码
	 */
	public static void clickBlankArea2HideSoftInput1() {
	    Log.i("tips", "U should copy the following code.");
	    /*
	    @Override
	    public boolean dispatchTouchEvent(MotionEvent ev) {
	        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
	            View v = getCurrentFocus();
	            if (isShouldHideKeyboard(v, ev)) {
	                hideKeyboard(v.getWindowToken());
	            }
	        }
	        return super.dispatchTouchEvent(ev);
	    }
	    // 根据EditText所在坐标和用户点击的坐标相对比，来判断是否隐藏键盘
	    private boolean isShouldHideKeyboard(View v, MotionEvent event) {
	        if (v != null && (v instanceof EditText)) {
	            int[] l = {0, 0};
	            v.getLocationInWindow(l);
	            int left = l[0],
	                    top = l[1],
	                    bottom = top + v.getHeight(),
	                    right = left + v.getWidth();
	            return !(event.getX() > left && event.getX() < right
	                    && event.getY() > top && event.getY() < bottom);
	        }
	        return false;
	    }
	    // 获取InputMethodManager，隐藏软键盘
	    private void hideKeyboard(IBinder token) {
	        if (token != null) {
	            InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
	            im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
	        }
	    }
	    */
	}
	
	/**
	* 动态显示软键盘
	*/
	public static void showSoftInput(Context context, EditText edit) {
	    edit.setFocusable(true);
	    edit.setFocusableInTouchMode(true);
	    edit.requestFocus();
	    InputMethodManager inputManager = (InputMethodManager) context
	            .getSystemService(Context.INPUT_METHOD_SERVICE);
	    inputManager.showSoftInput(edit, 0);
	}
	/**
	* 切换键盘显示与否状态
	*/
	public static void toggleSoftInput(Context context, EditText edit) {
	    edit.setFocusable(true);
	    edit.setFocusableInTouchMode(true);
	    edit.requestFocus();
	    InputMethodManager inputManager = (InputMethodManager) context
	            .getSystemService(Context.INPUT_METHOD_SERVICE);
	    inputManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
	}
	
}
